(																																		#   $1 total match
  ((?i-mx:[^-\/"':!=A-Z0-9_@＠]|^|\:))																									#   $2 Preceeding chracter
  (																																		#   $3 URL
    (https?:\/\/)																														#   $4 Protocol
    ((?i-mx:(?:[^[:punct:]\s][\.-](?=[^[:punct:]\s])|[^[:punct:]\s]){1,}\.[a-z]{2,}(?::[0-9]+)?))										#   $5 Domain(s) and optional post number
    (\/
      (?:
        (?ix-m:
			(?i-mx:\((?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\))|
			@(?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\/|
			[\.,](?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+|
			(?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+
			)+(?i-mx:[a-z0-9=_#\/\+\-]|(?i-mx:\((?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\)))|											# 1+ path chars and a valid last char
        (?ix-m:
			(?i-mx:\((?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\))|
			@(?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\/|
			[\.,](?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+|
			(?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+
		)+(?i-mx:[a-z0-9=_#\/\+\-]|(?i-mx:\((?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\)))?|											# Optional last char to handle \/@foo\/ case
              (?i-mx:[a-z0-9=_#\/\+\-]|(?i-mx:\((?i-mx:[a-z0-9!\*';:=\+\,\$\/%#\[\]\-_~])+\)))											# Just a # case
		)?
	)?																																	#   $6 URL Path and anchor
          (\?(?i-mx:[a-z0-9!\*'\(\);:&=\+\$\/%#\[\]\-_\.,~])*(?i-mx:[a-z0-9_&=#\/]))?													#   $7 Query String
	)
)
